/*******************************************************************************
* Copyright (c) 2016 Red Hat Inc. and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* - Mickael Istria (Red Hat Inc.)
*******************************************************************************/
package org.eclipse.ui.tests.datatransfer.contributions;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
public class ImportMeProjectConfigurator implements org.eclipse.ui.wizards.datatransfer.ProjectConfigurator {
private static final String IMPORTME_FILENAME = "importme";
public static final Set<IProject> configuredProjects = new HashSet<>();
@Override
public Set<File> findConfigurableLocations(File root, IProgressMonitor monitor) {
Set<File> res = new HashSet<>();
Queue<File> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
File current = queue.poll();
if (new File(current, IMPORTME_FILENAME).isFile()) {
res.add(current);
}
if (current.isDirectory()) {
File[] files = current.listFiles();
if (files != null) {
queue.addAll(Arrays.asList(files));
}
}
}
return res;
}
@Override
public boolean shouldBeAnEclipseProject(IContainer container, IProgressMonitor monitor) {
return container.getFile(new Path(IMPORTME_FILENAME)).exists();
}
@Override
public Set<IFolder> getFoldersToIgnore(IProject project, IProgressMonitor monitor) {
return Collections.emptySet();
}
@Override
public boolean canConfigure(IProject project, Set<IPath> ignoredPaths, IProgressMonitor monitor) {
if (shouldBeAnEclipseProject(project, monitor)) {
return true;
}
try {
for (IResource child : project.members()) {
boolean ignore = false;
for (IPath ignoredPath : ignoredPaths) {
ignore |= ignoredPath.isPrefixOf(child.getLocation());
if (ignore) {
continue;
}
}
if (!ignore && child.getType() == IResource.FOLDER && ((IFolder) child).findMember(IMPORTME_FILENAME) != null) {
return true;
}
}
} catch (CoreException e) {
// Nothing
}
return false;
}
@Override
public void configure(IProject project, Set<IPath> ignoredPaths, IProgressMonitor monitor) {
configuredProjects.add(project);
}
}